There are comparatively few tools that analyze the extent to which software applications utilize multiprocessor systems effectively. Yet if a software applications isn't multiprocessor-exploitive, it may become less competitive (performance-wise), as the popularity of multiprocessor systems increases.
On conventional multiprocessor systems running standard operating systems, multithreaded applications are nominally multiprocessor-exploitive because the threads of the application are assigned to individual processors that can run them concurrently. However, the degree to which a multithreaded program is actually multiprocessor-exploitive may vary depending on the design of the application itself.
Unfortunately, such a multithreaded program may fail when individual threads of the program block one another, thus allowing one or more processors to idle while useful computations could have occurred. Accordingly, a better-designed threading model for such a multithreaded application may prevent this waste of processor time, thus improving the observed performance of the multiprocessor system.